package com.wgo.bpot.wiring.common;

import java.lang.reflect.Method;
import java.util.Set;

/**
 * Used to arrange for intelligent reflection.
 * 
 * {@url http://java.sun.com/docs/books/jls/third_edition/html/names.html#6.8.2}
 * 
 * @author Petter L. H. Eide
 */
public interface DomainModelConvention<T> {

	public Class<? extends T> apiToImpl ( Class<? extends T> apiClass ) ;
	
	public Class<? extends T> implToApi ( Class<? extends T> implClass ) ;
	
	public Method getIdentifierMethod(Object instance);
	
	public Class<T> getDomainModelInterface () ;
	
    /**
	 * This method can only be used for read operations. Should be done 
	 * with name pattern and reflection.
	 * 
	 * @return A clone of the DomainModelConvention's List of RootConceptClasses
	 */
	public Set<Class<? extends T>> getRootConceptClasses () ;

}
